/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.lm.filter;

import br.com.lm.anotacoes.AnnotationData;
import br.com.lm.anotacoes.AnnotationElement;
import br.com.lm.anotacoes.AnnotationResult;
import br.com.lm.anotacoes.AnnotationScan;
import br.com.lm.anotacoes.AnnotationType;
import br.com.lm.base.eao.EaoException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.Column;

public class Configuracao {

    private Map<String, String> camposMap;
    private Map<String, String> camposMapType;
    
    public  HashMap<String, Map> tabelasMap;
    
    private String nomeColuna;
    private String nomeEntidade;
    private String type;
    private String cNomMap;
    private String cNomMapType;
    private String nomeTabelaJoin;

    public Configuracao() {}

    @SuppressWarnings("UnusedAssignment")
    public void gravaObjeto() throws EaoException {
        
        tabelasMap = new HashMap<String, Map>();
        
        //Busca "Todas Anotacoes" para todas classes/pacotes definida em META-INF/persistence.xml
        List<AnnotationResult> annoResults = AnnotationScan.getAnnotation("META-INF", null);
        if (annoResults != null && !annoResults.isEmpty()) {
            
            //Uma classe pode perterncer a varios pacotes, mas na nossa pesquisa "META-INF"
            //Nao existe esta possibilidade, então trabalha com a primeira (unica) ocorrencia
            AnnotationResult annoResult = annoResults.get(0);
            
            //Elementos de anotacao
            AnnotationElement annoConfigura = null;
            AnnotationElement annoColumn = null;
            AnnotationData[] annoDataModel = new AnnotationData[1];
            String nomeAnotacao = null;            
            
            //Obtem todas classes que foram anotadas
            String[] classesNames = annoResult.getArrayClassesName();
            for (String className: classesNames) {

                //Busca elementos da anotacao "ConfiguraCampoAnnotation" na classe anotada da pesquisa "META-INF"
                annoConfigura = annoResult.getElementByClsNameAndAnnotation(className, ConfiguraCampoAnnotation.class);
                if (annoConfigura != null) {
                
                    camposMap = new HashMap<String, String>();
                    camposMapType = new HashMap<String, String>();

                    cNomMap = annoConfigura.getClassNameWithAnnotation();
                    cNomMapType = cNomMap.concat("Type");
                    
                    //Deve existir apenas uma ocorrencia de anotacao devido ao filtro className/anotacao usado em annoConfigura
                    nomeAnotacao = annoConfigura.getArrayAnnotationName()[0];
                    
                    //Uma mesma anotacao pode estar repetida em varios pontos da classe anotada 
                    AnnotationData[] fldsTabJoin = annoConfigura.getAnnotationByNameTypeElementKey(
                                                   nomeAnotacao, AnnotationType.Field, "nomeTabelJoin").toArray(annoDataModel);
                            
                    AnnotationData[] fldsCampo   = annoConfigura.getAnnotationByNameTypeElementKey(
                                                   nomeAnotacao, AnnotationType.Field, "campo").toArray(annoDataModel);
                            
                    AnnotationData[] fldsTipo    = annoConfigura.getAnnotationByNameTypeElementKey(
                                                   nomeAnotacao, AnnotationType.Field, "tipo").toArray(annoDataModel);

                    AnnotationData[] fldsPsqsa   = annoConfigura.getAnnotationByNameTypeElementKey(
                                                   nomeAnotacao, AnnotationType.Field, "pesquisa").toArray(annoDataModel);
                    
                    //Explora o array de fields da anotacao pelo mandatorio
                    for (int i=0; i<fldsTabJoin.length; i++) {
                        nomeTabelaJoin = fldsTabJoin[i].getAnnotationValue();
                        nomeColuna = nomeTabelaJoin.concat(".").concat(fldsCampo[i].getAnnotationValue());
                        nomeEntidade = fldsPsqsa[i].getAnnotationValue();
                        type = fldsTipo[i].getAnnotationValue();
                        
                        camposMap.put(nomeEntidade, nomeColuna);
                        camposMapType.put(nomeEntidade, type);
                    }
                    
                    //Busca outros elementos de anotacao "javax.persistence.Column"  
                    annoColumn = annoResult.getElementByClsNameAndAnnotation(className, Column.class);
                    if (annoColumn != null) {
                        nomeAnotacao = annoColumn.getArrayAnnotationName()[0];
                        AnnotationData[] fldsCampo2 = annoColumn.getAnnotationByNameTypeElementKey(
                                                      nomeAnotacao, AnnotationType.Field, "campo").toArray(annoDataModel);
                        for (int i=0; i<fldsCampo2.length; i++) {
                            nomeColuna = nomeAnotacao;
                            nomeEntidade = fldsCampo2[i].getAnnotatedElementName(); 
                            type = fldsCampo2[i].getAnnotatedElementType().toString(); 
                            if (!camposMap.containsKey(nomeEntidade)) {
                                camposMap.put(nomeEntidade, nomeColuna);
                                camposMapType.put(nomeEntidade, type);
                            }
                        }
                    } 
                    
                    camposMap.put(cNomMap, retornaSql(cNomMap));
                    camposMap.put("Order", retornaOrder(cNomMap));

                    tabelasMap.put(cNomMap, camposMap);
                    tabelasMap.put(cNomMapType, camposMapType);
                }
            }
        }
    }

    private String retornaSql(String cTabela) {
        String cSql = null;

        if (cTabela.equals("Banco")) {
            cSql = "SELECT id_banco,numero,nom_Banco,link "
                    + "FROM banco ";
        } else if (cTabela.equals("CepEndereco")) {
            cSql = "SELECT cep_endereco.cod_logradouro,cep_endereco.dsc_complemento,cep_endereco.dsc_logradouro,cep_endereco.num_cep, "
                    + "cep_bairro.cod_bairro,cep_bairro.dsc_bairro,cep_cidade.cod_cidade, "
                    + "cep_cidade.cep,cep_cidade.dsc_cidade,cep_cidade.cod_municipio,cep_uf.cod_uf, "
                    + "cep_uf.dsc_estado "
                    + "FROM cep_endereco, cep_bairro, cep_cidade, cep_uf "
                    + "WHERE cep_endereco.cod_bairro = cep_bairro.cod_bairro AND cep_bairro.cod_cidade = cep_cidade.cod_cidade "
                    + "AND cep_cidade.cod_uf = cep_uf.cod_uf ";
        } else if (cTabela.equals("Departamento")) {
            cSql = "select departamento.id_departamento,departamento.dsc_departamento "
                    + "from departamento ";
        } else if (cTabela.equals("CodigoDdd")) {
            cSql = "SELECT id_ddd,codigo,localidade,municipio,sigla,cep_uf.cod_uf "
                    + "FROM codigo_ddd , cep_uf "
                    + "where codigo_ddd.cod_uf = cep_uf.cod_uf ";
           
            
        } else if (cTabela.equals("CtrlUsuario")) {
            cSql = "select cod_usuario,nom_usuario,dsc_email,tel_fixo_usuario,tel_mov_usuario,cpf_ou_cnpj,dsc_pergunta,dsc_resposta,"
                    + "dsc_thema,psw_usuario,dados_adicionais,sts_usuario "
                    + "FROM Ctrl_Usuario ";
        } else if (cTabela.equals("CtrlModulo")) {
            cSql = "select id_modulo,dsc_modulo,apl_modulo,pred_modulo "
                    + "FROM Ctrl_Modulo ";
        } else if (cTabela.equals("CtrlObjetoAcesso")) {
            cSql = "select id_obj_autoriz,id_modulo,num_seq_obj,nom_obj_01,nom_obj_02,ext_objs "
                    + "FROM Ctrl_Objeto_Acesso ";
        } else if (cTabela.equals("CtrlPerfil")) {
            cSql = "select id_perfil,dsc_perfil,sts_perfil "
                    + "FROM Ctrl_Perfil ";
        } else if (cTabela.equals("CtrlPerfilAcesso")) {
            cSql = "select id_perfil,id_modulo_root,id_modulo_item,cod_visibilidade,sts_modulo_item,id_obj_autoriz,seq_modulo  "
                    + "FROM Ctrl_Perfil_Acesso ";
            
            
            
            
        } else if (cTabela.equals("CepBairro")) {
            cSql = "SELECT cep_bairro.cod_bairro,cep_bairro.dsc_bairro,cep_cidade.cod_cidade, "
                    + "cep_cidade.cep,cep_cidade.dsc_cidade,cep_cidade.cod_municipio,cep_uf.cod_uf, "
                    + "cep_uf.dsc_estado "
                    + "FROM cep_bairro, cep_cidade, cep_uf "
                    + "WHERE cep_bairro.cod_cidade = cep_cidade.cod_cidade AND cep_cidade.cod_uf = cep_uf.cod_uf ";
        } else if (cTabela.equals("Moeda")) {
            cSql = "SELECT id_moeda,nom_moeda,sigla,cotacao,data_cotacao "
                    + "FROM moeda ";
        } else if (cTabela.equals("CepUf")) {
            cSql = "SELECT  cod_uf, dsc_estado "
                    + "FROM cep_uf ";
        } else if (cTabela.equals("PlanoContas")) {
            cSql = "select plano_contas.id_plano_conta,plano_contas.nivel1,plano_contas.nivel2,plano_contas.nivel3,plano_contas.nivel4,"
                    + "plano_contas.nivel5,plano_contas.nivel6,plano_contas.nivel7,plano_contas.nivel8,plano_contas.nivel9,plano_contas.nivel10,"
                    + "plano_contas.reduzido, "
                    + "plano_contas.nome,plano_contas.descricao,plano_contas.saldoanterior,plano_contas.debitos,plano_contas.creditos,"
                    + "plano_contas.saldoatual,plano_contas.tip_conta,plano_contas.id_grupo_conta,plano_contas.num_conta, "
                    + "planos_grupos.id_grupo_conta,planos_grupos.nivel1,planos_grupos.nivel2,planos_grupos.nivel3,planos_grupos.nivel4,"
                    + "planos_grupos.nivel5,planos_grupos.nivel6,planos_grupos.nivel7,planos_grupos.nivel8,planos_grupos.nivel9,"
                    + "planos_grupos.nivel10,planos_grupos.nome,planos_grupos.descricao,planos_grupos.mascara "
                    + "from plano_contas, planos_grupos "
                    + "where plano_contas.id_grupo_conta = planos_grupos.id_grupo_conta ";
        } else if (cTabela.equals("TipoDocumento")) {
            cSql = "SELECT id_Documento,dsc_Documento, tip_documento "
                    + "FROM tipo_Documento ";
        } else if (cTabela.equals("CepCidade")) {
            cSql = "SELECT cep_cidade.cod_cidade,cep_cidade.cep,cep_cidade.dsc_cidade,cep_cidade.cod_municipio,cep_uf.cod_uf,cep_uf.dsc_estado "
                    + "FROM cep_cidade , cep_uf "
                    + "WHERE cep_cidade.cod_uf = cep_uf.cod_uf ";
        } else if (cTabela.equals("CodigoDdi")) {
            cSql = "SELECT id_ddi,ddi,descricao "
                    + "FROM codigo_ddi ";
        } else if (cTabela.equals("Categoria")) {
            cSql = "SELECT id_categoria,dsc_categoria,tip_categoria, "
                    + "CASE WHEN tip_categoria = 1 THEN 'Cliente-Fornecedor' "
                    + "WHEN tip_categoria = 2 THEN 'Serviço' "
                    + "WHEN tip_categoria = 3 THEN 'Produto' "
                    + "END AS dscTipCategoria "
                    + "FROM categoria ";
        } else if (cTabela.equals("TipoConta")) {
            cSql = "SELECT id_tipo,dsc_tipo "
                    + "FROM tipo_conta ";
        } else if (cTabela.equals("FormaPagamento")) {
            cSql = "SELECT id_Pagamento,dsc_Pagamento "
                    + "FROM Forma_Pagamento ";
        } else if (cTabela.equals("ContaReceberParcela")) {
        } else if (cTabela.equals("ContaReceber")) {
            cSql = "SELECT id_receber,dat_emissao,dsc_obs,dsc_receber,num_documento,per_juros,tip_juros,"
                    + "vlr_desconto,vlr_multa,vlr_receber,id_categoria,id_cliente,id_custo,id_plano_conta "
                    + "from conta_receber ";
        } else if (cTabela.equals("ContaPagar")) {
            cSql = "SELECT id_pagar,dat_emissao,dsc_obs,dsc_pagar,num_documento,per_juros,tip_juros,"
                    + "vlr_desconto,vlr_multa,vlr_pagar,id_categoria,id_fornecedor,id_custo,id_plano_conta "
                    + "from conta_pagar ";
        } else if (cTabela.equals("ContaBancaria")) {
            cSql = "SELECT conta_bancaria.id_conta,conta_bancaria.dsc_conta,conta_bancaria.dat_abertura,conta_bancaria.nom_titular,"
                    + "conta_bancaria.vlr_saldo_inicial,conta_bancaria.id_tipo,conta_bancaria.id_banco, "
                    + "conta_bancaria.num_agencia,conta_bancaria.num_conta,conta_bancaria.id_moeda,conta_bancaria.limite_credito,"
                    + "conta_bancaria.dat_limite_credito,conta_bancaria.tip_status, "
                    + "conta_bancaria.nom_contato,conta_bancaria.tip_telefone1,conta_bancaria.num_telefone1,conta_bancaria.tip_telefone2,conta_bancaria.num_telefone2, "
                    + "conta_bancaria.tip_telefone3,conta_bancaria.num_telefone3,conta_bancaria.dsc_email,conta_bancaria.dsc_obs,"
                    + "tipo_conta.dsc_tipo, banco.nom_banco,banco.link,banco.numero,moeda.cotacao,moeda.data_cotacao,moeda.nom_moeda,moeda.sigla "
                    + "FROM conta_bancaria, tipo_conta, banco, moeda "
                    + "WHERE conta_bancaria.id_tipo = tipo_conta.id_tipo and conta_bancaria.id_banco = banco.id_banco "
                    + "and conta_bancaria.id_moeda = moeda.id_moeda ";
        } else if (cTabela.equals("Cliente")) {
            cSql = "SELECT id_cliente,tip_cliente,nom_cliente,dat_nasc_abert,tip_sexo, "
                    + "dsc_email,dsc_site,dsc_historico,dsc_obs,categoria.id_categoria, categoria.dsc_categoria, nom_fantasia, "
                    + "CASE WHEN tip_cliente = 'F' THEN CPF_formatar(num_cpf) "
                    + "WHEN tip_cliente = 'J' THEN cnpj_formatar(num_cpf) "
                    + "END AS num_cpf "
                    + "FROM cliente, categoria "
                    + "WHERE cliente.id_categoria = categoria.id_categoria ";
        } else if (cTabela.equals("ClienteEndereco")) {
            cSql = "SELECT id_endereco,tip_endereco,dsc_endereco,cod_logradouro, "
                    + "dsc_complemento,num_endereco,id_cliente "
                    + "FROM cliente_endereco ";
        } else if (cTabela.equals("ClienteEnderecoTelefone")) {
            cSql = "SELECT id_telefone,id_endereco,id_cliente,tip_telefone, "
                    + "id_ddi,id_ddd,dsc_telefone,num_telefone,num_ramal "
                    + "FROM cliente_endereco_telefone ";
        } else if (cTabela.equals("Processo")) {
            cSql = "SELECT id_processo,com_data,com_numero,com_texto,dat_update,dsc_obs,emp_color,loc_bairro,loc_dat_desde, "
                    + "loc_descricao,loc_email,loc_endereco,loc_funciionario,loc_ramal,loc_rf,loc_telefone,loc_transito,loc_unidade, "
                    + "proc_assunto,proc_interessado,proc_motivo,sit_comunique,sit_data_situacao,sit_descricao,sit_despacho,sit_dom, "
                    + "sit_situacao_data_descricao,sit_vencimento,id_empreendimento_lote, dat_atendido,dat_prorrogacao1,dat_prorrogacao2, "
                    + "dat_prorrogacao3,dat_concessao1,dat_concessao2,dat_concessao3, des_descricao,des_despacho,des_data,des_motivo "
                    + "FROM processo ";
        } else if (cTabela.equals("ProcessoSituacao")) {
            cSql = "SELECT processo_situacao.id_situacao,processo_situacao.ass_descricao,processo_situacao.ass_situacao,"
                    + "processo_situacao.ass_tipo,processo_situacao.ass_data, processo_situacao.ass_color "
                    + "FROM processo_situacao ";
        } else if (cTabela.equals("Empreendimento")) {
            cSql = "SELECT empreendimento.id_empreendimento,empreendimento.dsc_empreendimento,empreendimento.id_cliente, "
                    + "empreendimento.emp_color,empreendimento.num_cpf_empreendimento,empreendimento.tip_empreendimento, empreendimento.dat_update, "
                    + "empreendimento.dsc_raz_nome, empreendimento.nom_tecnico, empreendimento.dpt_responsavel, "
                    + "cliente.nom_cliente,cliente.num_cpf,cliente.dsc_email,cliente.dat_nasc_abert, "
                    + "cliente.dsc_historico,cliente.dsc_obs,cliente.tip_sexo, "
                    + "cliente.dsc_site,cliente.tip_cliente,cliente.id_categoria,cliente.nom_fantasia, "
                    + "emp_ass,emp_com,emp_des,emp_loc,emp_proc,emp_sit "
                    + "FROM empreendimento INNER JOIN cliente ON empreendimento.id_cliente = cliente.id_cliente ";
        } else if (cTabela.equals("EmpreendimentoLote")) {
            cSql = "SELECT id_empreendimento_lote,dsc_lote,num_processo,status,tip_prioridade,id_empreendimento,dat_update,dat_processo, dsc_orgao, "
                    + "emp_color, tip_status, tip_status_sinal, dsc_id_lote "
                    + "FROM empreendimento_lote ";
        } else if (cTabela.equals("ViewEmail")) {
            cSql = "SELECT name,complemento,email "
                    + "FROM view_email ";
        } else if (cTabela.equals("Fornecedor")) {
            cSql = "SELECT id_fornecedor,tip_fornecedor,nom_fornecedor,dat_nasc_abert,tip_sexo, "
                    + "dsc_email,dsc_site,dsc_historico,dsc_obs,categoria.id_categoria, categoria.dsc_categoria, nom_fantasia, "
                    + "CASE WHEN tip_fornecedor = 'F' THEN CPF_formatar(num_cpf) "
                    + "WHEN tip_fornecedor = 'J' THEN cnpj_formatar(num_cpf) "
                    + "END AS num_cpf "
                    + "FROM fornecedor, categoria "
                    + "WHERE fornecedor.id_categoria = categoria.id_categoria ";
        } else if (cTabela.equals("FornecedorEndereco")) {
            cSql = "SELECT id_endereco,tip_endereco,dsc_endereco,cod_logradouro, "
                    + "dsc_complemento,num_endereco,id_fornecedor "
                    + "FROM fornecedor_endereco ";
        } else if (cTabela.equals("FornecedorEnderecoTelefone")) {
            cSql = "SELECT id_telefone,id_endereco,id_fornecedor,tip_telefone, "
                    + "id_ddi,id_ddd,dsc_telefone,num_telefone,num_ramal "
                    + "FROM fornecedor_endereco_telefone ";
        } else if (cTabela.equals("ControleBancario")) {
            cSql = "SELECT id_controle,tip_controle,dsc_controle,dat_controle,vlr_saldo_inicial,vlr_credito,"
                    + "vlr_debito,id_custo,id_plano_conta,id_conta,vlr_saldo_final,num_documento "
                    + "FROM controle_bancario ";
        } else if (cTabela.equals("PropostaEmail")) {
            cSql = "SELECT id_email,dsc_email,email "
                    + "FROM proposta_email ";
        } else if (cTabela.equals("PropostaProcuracao")) {
            cSql = "SELECT id_procuracao,dsc_procuracao,procuracao "
                    + "FROM proposta_procuracao ";
        } else if (cTabela.equals("OrgaoDocumento")) {
            cSql = "SELECT id_orgao,dsc_orgao,dsc_assunto "
                    + "FROM orgao_documento ";
        } else if (cTabela.equals("PropostaEtapa")) {
            cSql = "SELECT id_etapa,nom_etapa "
                    + "FROM proposta_etapa ";
        } else if (cTabela.equals("PropostaEtapaDesc")) {
            cSql = "SELECT id_etapa_desc,dsc_etapa1,dsc_etapa2,num_etapa,obs_etapa1,obs_etapa2,id_etapa "
                    + "FROM proposta_etapa_desc ";
        } else if (cTabela.equals("PropostaModelo")) {
            cSql = "SELECT id_modelo,dsc_modelo,modelo "
                    + "FROM proposta_modelo ";
        } else if (cTabela.equals("ViewAcompanhamentoProcesso")) {
            cSql = "SELECT nom_fantasia,dsc_empreendimento,num_processo,dsc_lote,dsc_orgao,sit_descricao,loc_funciionario,nom_tecnico,"
                    + "dsc_obs,dpt_responsavel,loc_dat_desde,dat_update "
                    + "FROM view_acompanhamento_processo ";
        } else if (cTabela.equals("Proposta")) {
            cSql = "SELECT proposta.id_proposta,proposta.dat_proposta,proposta.dsc_email,proposta.dsc_proposta,proposta.tip_status,"
                    + "proposta.id_email,proposta.id_cliente,proposta.nom_empreendimento, "
                    + "cliente.nom_cliente,cliente.num_cpf,cliente.dsc_email,cliente.dat_nasc_abert, "
                    + "cliente.dsc_historico,cliente.dsc_obs,cliente.tip_sexo, "
                    + "cliente.dsc_site,cliente.tip_cliente,cliente.id_categoria,cliente.nom_fantasia "
                    + "FROM proposta INNER JOIN cliente ON proposta.id_cliente = cliente.id_cliente ";
        } else if (cTabela.equals("TempAcompanhamento")) {
            cSql = "SELECT acompanhamento_id,nom_fantasia,dsc_empreendimento,num_processo,dsc_lote,dsc_orgao,"
                    + "sit_descricao,loc_funciionario,nom_tecnico,dsc_obs,dpt_responsavel,loc_dat_desde,dat_update, dsc_id_lote "
                    + "FROM temp_acompanhamento ";
        } else if (cTabela.equals("Diagnostico")) {
            cSql = "SELECT id_diagnostico,dsc_diagnostico,dsc_nivel1 "
                    + "FROM diagnostico ";
        }

        return cSql;
    }

    private String retornaOrder(String cTabela) {
        String cOrder = null;
        
        if (cTabela.equals("CtrlModulo")) {
            cOrder = " dsc_modulo ";            
        } else if (cTabela.equals("CtrlUsuario")) {
            cOrder = " nom_usuario ";
        } else if (cTabela.equals("CtrlPerfil")) {
            cOrder = " dsc_perfil ";
        } else if (cTabela.equals("CtrlPerfilAcesso")) {
            cOrder = " id_perfil, id_modulo_root, id_modulo_item, id_obj_autoriz ";
        } else if (cTabela.equals("CtrObjetoAcesso")) {
            cOrder = " nom_obj_01, nom_obj_02 ";
            
            
        } else if (cTabela.equals("Banco")) {
            cOrder = " nom_Banco ";
        } else if (cTabela.equals("CepEndereco")) {
            cOrder = " num_cep ";
        } else if (cTabela.equals("Departamento")) {
            cOrder = " dsc_departamento ";
        } else if (cTabela.equals("CodigoDdd")) {
            cOrder = " codigo ";
        } else if (cTabela.equals("TipoBaixa")) {
            cOrder = " dsc_baixa ";
        } else if (cTabela.equals("CentroCusto")) {
            cOrder = " dsc_custo ";
        } else if (cTabela.equals("PlanosGrupos")) {
            cOrder = " id_grupo_conta ";
        } else if (cTabela.equals("CepBairro")) {
            cOrder = " dsc_bairro ";
        } else if (cTabela.equals("Moeda")) {
            cOrder = " nom_Moeda ";
        } else if (cTabela.equals("CepUf")) {
            cOrder = "cod_uf";
        } else if (cTabela.equals("PlanoContas")) {
            cOrder = " plano_contas.nivel1,plano_contas.nivel2,plano_contas.nivel3,plano_contas.nivel4,"
                    + "plano_contas.nivel5,plano_contas.nivel6,plano_contas.nivel7,plano_contas.nivel8,plano_contas.nivel9,plano_contas.nivel10 ";
        } else if (cTabela.equals("TipoDocumento")) {
            cOrder = " dsc_Documento ";
        } else if (cTabela.equals("CepCidade")) {
            cOrder = " dsc_cidade ";
        } else if (cTabela.equals("CodigoDdi")) {
            cOrder = " descricao ";
        } else if (cTabela.equals("Categoria")) {
            cOrder = " tip_categoria,dsc_categoria ";
        } else if (cTabela.equals("TipoConta")) {
            cOrder = " dsc_tipo ";
        } else if (cTabela.equals("FormaPagamento")) {
            cOrder = " dsc_Pagamento ";
        } else if (cTabela.equals("ContaReceberParcela")) {
            cOrder = "";
        } else if (cTabela.equals("ContaReceber")) {
            cOrder = " dat_emissao ";
        } else if (cTabela.equals("ContaPagar")) {
            cOrder = " dat_emissao ";
        } else if (cTabela.equals("ContaBancaria")) {
            cOrder = " banco.nom_Banco ";
        } else if (cTabela.equals("Cliente")) {
            cOrder = " nom_fantasia ";
        } else if (cTabela.equals("ClienteEndereco")) {
            cOrder = " tip_Endereco, dsc_endereco ";
        } else if (cTabela.equals("ClienteEnderecoTelefone")) {
            cOrder = " tip_telefone, dsc_telefone ";
        } else if (cTabela.equals("Processo")) {
            cOrder = " processo.dat_update ";
        } else if (cTabela.equals("ProcessoSituacao")) {
            cOrder = " id_processo ";
        } else if (cTabela.equals("Empreendimento")) {
            cOrder = " empreendimento.dat_update ";
        } else if (cTabela.equals("EmpreendimentoLote")) {
            cOrder = " empreendimento_lote.dat_update ";
        } else if (cTabela.equals("ViewEmail")) {
            cOrder = " complemento ";
        } else if (cTabela.equals("Fornecedor")) {
            cOrder = " nom_fantasia ";
        } else if (cTabela.equals("FornecedorEndereco")) {
            cOrder = " tip_Endereco, dsc_endereco ";
        } else if (cTabela.equals("FornecedorEnderecoTelefone")) {
            cOrder = " tip_telefone, dsc_telefone ";
        } else if (cTabela.equals("ControleBancario")) {
            cOrder = " dsc_controle ";
        } else if (cTabela.equals("PropostaEmail")) {
            cOrder = " dsc_email ";
        } else if (cTabela.equals("PropostaProcuracao")) {
            cOrder = " dsc_procuracao ";
        } else if (cTabela.equals("OrgaoDocumento")) {
            cOrder = " dsc_orgao ";
        } else if (cTabela.equals("PropostaEtapa")) {
            cOrder = " nom_etapa ";
        } else if (cTabela.equals("PropostaModelo")) {
            cOrder = " dsc_modelo ";
        } else if (cTabela.equals("PropostaEtapaDesc")) {
            cOrder = " to_number(num_etapa,'99999') ";
        } else if (cTabela.equals("ViewAcompanhamentoProcesso")) {
            cOrder = " num_processo ";
        } else if (cTabela.equals("Proposta")) {
            cOrder = " dsc_proposta ";
        } else if (cTabela.equals("TempAcompanhamento")) {
            cOrder = " nom_fantasia ";
        } else if (cTabela.equals("Diagnostico")) {
            cOrder = " dsc_diagnostico ";
        }

        return cOrder;
    }
}
